package ewu

import ewu._
import java.util.ArrayList
import lang.LOC
import gui._
import scala.swing._
import scala.swing.Dialog._

/**
 * Eine Konfiguration besteht aus einer Umgebung und einerAnweisungsfolge. Wird darauf die
 * "numerate" oder die "trace" aufgerufen, werden die Methoden entsprechend an die
 * Anweisungsfolge weitergereicht, um das gewünschte Ergebnis zu erzielen.
 * Die Konfiguration ist als "Basisbaustein" des Programms zu verstehen, da auszuwertende
 * Programmabschnitte in diesem Typ übergeben / erstellt werden.
 */

case class Konfiguration(umgebung: Environment, teil: Anweisungsfolge) {

  override def toString(): String = {
    return teil.toString
  }

  def numerate(num: List[Int]) = {
    teil.numerate(num)
  }
  
  def tabbate(i: Int) = {
    teil.tabbate(i)
  }

  def trace(tt: Layout): String = {
    if(!teil.traceB) println("####### Fehler beim Trace -> Bound !!!")
    
    var (ausgabe, cont, count) = teil.trace(0, umgebung, tt)
    return ausgabe
  }

  def protocol(): String = {
    if(teil.protocol.isEmpty)
      return LOC.get("KeinBeweisbedarf")
    else
      return teil.protocol
  }
  
  def propagate_out(): String = {
    var ausgabe: String = ""
    teil.propagate
    for(i <- teil.anweisungsfolge)
      ausgabe ++= i.toTabString
    return ausgabe
  }
  
  def propagate() = {
    teil.propagate
  }
  
  def toCheckVersion(arrayvars: ArrayList[String]): (Konfiguration, ArrayList[String]) = {
    var umg = this.umgebung
    var addfuncs = new ArrayList[String]
    var anwf = teil.toCheckVersion(addfuncs, arrayvars)
    var ret = new Konfiguration(umg, anwf)
    return (ret, addfuncs)
  }
}


 